home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / cpu.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  84 lines

  1. /*
  2.  * include/linux/cpu.h - generic cpu definition
  3.  *
  4.  * This is mainly for topological representation. We define the 
  5.  * basic 'struct cpu' here, which can be embedded in per-arch 
  6.  * definitions of processors.
  7.  *
  8.  * Basic handling of the devices is done in drivers/base/cpu.c
  9.  * and system devices are handled in drivers/base/sys.c. 
  10.  *
  11.  * CPUs are exported via driverfs in the class/cpu/devices/
  12.  * directory. 
  13.  *
  14.  * Per-cpu interfaces can be implemented using a struct device_interface. 
  15.  * See the following for how to do this: 
  16.  * - drivers/base/intf.c 
  17.  * - Documentation/driver-model/interface.txt
  18.  */
  19. #ifndef _LINUX_CPU_H_
  20. #define _LINUX_CPU_H_
  21.  
  22. #include <linux/sysdev.h>
  23. #include <linux/node.h>
  24. #include <linux/compiler.h>
  25. #include <linux/cpumask.h>
  26. #include <asm/semaphore.h>
  27.  
  28. struct cpu {
  29.     int node_id;        /* The node which contains the CPU */
  30.     int no_control;        /* Should the sysfs control file be created? */
  31.     struct sys_device sysdev;
  32. };
  33.  
  34. extern int register_cpu(struct cpu *, int, struct node *);
  35. #ifdef CONFIG_HOTPLUG_CPU
  36. extern void unregister_cpu(struct cpu *, struct node *);
  37. #endif
  38. struct notifier_block;
  39.  
  40. #ifdef CONFIG_SMP
  41. /* Need to know about CPUs going up/down? */
  42. extern int register_cpu_notifier(struct notifier_block *nb);
  43. extern void unregister_cpu_notifier(struct notifier_block *nb);
  44.  
  45. int cpu_up(unsigned int cpu);
  46.  
  47. #else
  48.  
  49. static inline int register_cpu_notifier(struct notifier_block *nb)
  50. {
  51.     return 0;
  52. }
  53. static inline void unregister_cpu_notifier(struct notifier_block *nb)
  54. {
  55. }
  56.  
  57. #endif /* CONFIG_SMP */
  58. extern struct sysdev_class cpu_sysdev_class;
  59.  
  60. #ifdef CONFIG_HOTPLUG_CPU
  61. /* Stop CPUs going up and down. */
  62. extern struct semaphore cpucontrol;
  63. #define lock_cpu_hotplug()    down(&cpucontrol)
  64. #define unlock_cpu_hotplug()    up(&cpucontrol)
  65. #define lock_cpu_hotplug_interruptible() down_interruptible(&cpucontrol)
  66. #define hotcpu_notifier(fn, pri) {                \
  67.     static struct notifier_block fn##_nb =            \
  68.         { .notifier_call = fn, .priority = pri };    \
  69.     register_cpu_notifier(&fn##_nb);            \
  70. }
  71. int cpu_down(unsigned int cpu);
  72. #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
  73. #else
  74. #define lock_cpu_hotplug()    do { } while (0)
  75. #define unlock_cpu_hotplug()    do { } while (0)
  76. #define lock_cpu_hotplug_interruptible() 0
  77. #define hotcpu_notifier(fn, pri)
  78.  
  79. /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
  80. static inline int cpu_is_offline(int cpu) { return 0; }
  81. #endif
  82.  
  83. #endif /* _LINUX_CPU_H_ */
  84.